//将每个元素替换为右侧最大元素
/*给你一个数组 arr ，请你将每个元素用它右边最大的元素替换，如果是最后一个元素，用 -1 替换。

完成所有替换操作后，请你返回这个数组。
1 <= arr.length <= 10^4
1 <= arr[i] <= 10^5
*/
class Solution {
public:
    vector<int> replaceElements(vector<int>& arr) {
        // 单调栈
        stack<int> nums;
        for (int i = arr.size() - 1; i >= 0; i--) {
            if (nums.empty() || arr[i] >= nums.top())
                nums.push(arr[i]);
        }
        for (int i = 0; i < arr.size(); i++) {

            if (arr[i] == nums.top()) {
                nums.pop();
            }
            if (nums.empty())
                arr[i] = -1;
            else
                arr[i] = nums.top();
        }
        return arr;
    }
};

//分割平衡字符串
/*平衡字符串 中，'L' 和 'R' 字符的数量是相同的。

给你一个平衡字符串 s，请你将它分割成尽可能多的子字符串，并满足：

每个子字符串都是平衡字符串。
返回可以通过分割得到的平衡字符串的 最大数量 。
2 <= s.length <= 1000
s[i] = 'L' 或 'R'
s 是一个 平衡 字符串
*/
class Solution {
public:
    int balancedStringSplit(string s) {
        int L_count = 0;
        int R_count = 0;
        int count = 0;
        for (auto i : s) {
            if (i == 'L')
                L_count++;
            else
                R_count++;
            if (L_count == R_count)
                count++;
        }
        return count;
    }
};

